package com.dao.impl;

import java.sql.*;

//jdbc的帮助类  封装类  执行sql对数据库进行操作
public class BaseDao {
	// 设置连接数据库的参数
	// 设置驱动类
	private final String driverClassName = "com.mysql.jdbc.Driver";
	// 设置连接据库的地址
	private final String url = "jdbc:mysql://localhost:3306/train";
	// 设置用户名
	private final String username = "root";
	// 设置密码
	private final String password = "888888";

	// 定义属性
	private Connection con = null;
	private PreparedStatement ps = null;
	private ResultSet rs = null;

	/**
	 * 获取连接对象的方法
	 * 
	 * @return 连接对象 java.sql.Connect
	 */
	public Connection getConn() {
		try {
			Class.forName(this.driverClassName);
			this.con = DriverManager.getConnection(url, username, password);
			return con;
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 执行添加，修改，删除的sql返回影响行数
	 * 
	 * @param sql
	 *            带参的sql语句
	 * @param params
	 *            参数值数组 例如:new Object[]{值1,值2...}
	 * @return 影响行数 失败返回-1,成功即是影响的行数
	 */
	public int executeUpdate(String sql, Object[] params) {
		// jdbc执行的代码
		int temp = -1;
		try {
			this.getConn();
			this.ps = con.prepareStatement(sql);
			// 传参
			if (params != null) {
				for (int i = 0; i < params.length; i++) {
					ps.setObject(i + 1, params[i]);
				}
			}
			// 执行
			temp = ps.executeUpdate();
			// 关闭
			this.closeAll();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return temp;
	}

	/**
	 * 执行查询 返回结查集
	 * 
	 * @param sql
	 *            参数化sql
	 * @param params
	 *            参数值数组 例如:new Object[]{值1,值2...}
	 * @return 结果集对象 java.sql.ResultSet
	 */
	public ResultSet executeQuery(String sql, Object[] params) {
		try {
			Connection con = this.getConn();
			this.ps = con.prepareStatement(sql);
			// 传参
			if (params != null) {
				for (int i = 0; i < params.length; i++) {
					ps.setObject(i + 1, params[i]);
				}
			}
			// 执行
			this.rs = ps.executeQuery();
			return this.rs;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 关闭资源的方法
	 */
	public void closeAll() {
		try {
			if (this.rs != null) {
				rs.close();
				rs = null;
			}
			if (this.ps != null) {
				this.ps.close();
				ps = null;
			}
			if (this.con != null) {
				con.close();
				con = null;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}
}
